home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
mac
/
LOGIC Apple II 5.25" Library - ProDOS
/
PRO002.dsk
/
THREE.DIM.bas
< prev
Wrap
BASIC Source File
|
2012-02-16
|
4KB
|
166 lines
10 PRINT CHR$(27);: PRINT CHR$(17): REM 40 COL.
20 TEXT : HOME
30 V = 1: GOSUB 40:V = 24: GOSUB 40: GOTO 60
40 VTAB (V): HTAB (1): FOR X = 1 TO 39: PRINT "_";: NEXT
50 RETURN
60 VTAB (5): HTAB (7)
70 PRINT "[ THIS PROGRAM IS FREEWARE ]"
80 PRINT : PRINT : HTAB (4)
90 PRINT "YOU ARE FREE TO DISTRIBUTE COPIES"
100 PRINT : HTAB (8)
110 PRINT "BUT YOU MAY NOT SELL THEM."
120 VTAB (18): HTAB (11)
130 PRINT "THE FREEWARE PROJECT"
140 PRINT : HTAB (11)
150 PRINT "WALDEN SOFTWARE, INC."
160 PRINT : HTAB (12)
170 PRINT "(C) 1984, P. LUTUS"
180 FOR PAUSE = 0 TO 2500: NEXT
190 GOTO 770
200 REM
210 REM THIS SECTION TRANSFORMS EACH 3D IMAGE
220 REM POINT, THEN DRAWS THE LINES
230 REM
240 ONERR GOTO 490
250 REM SET UP GRAPHICS MODE
260 HGR : HCOLOR= 3
270 L = 0
280 REM READ IMAGE POINT
290 D = I%(L,0)
300 IF D = -1 THEN RETURN
310 X = I%(L,1)
320 Y = I%(L,2)
330 Z = I%(L,3)
340 REM TRANSFORM POINT
350 FOR I = 1 TO 3
360 T(I) = (M(1,I) *X) +(M(2,I) *Y) +(M(3,I) *Z)
370 NEXT I
380 Z = -(T(3) *BZ/300) +13
390 X = OX +(T(1) *BX/Z)
400 Y = OY -(T(2) *BY/Z)
410 REM DISPLAY LINE (OLD X,Y TO NEW X,Y)
420 IF NOT D THEN 440
430 HPLOT LX,LY TO X,Y
440 LX = X:LY = Y
450 REM REPEAT FOR NEXT LINE
460 L = L +1
470 GOTO 290
480 REM PRINT ERROR MESSAGE AND RETURN
490 GOSUB 1400
500 INPUT "IMAGE TOO LARGE (RETURN) :";L$
510 GOTO 910
520 REM
530 REM THIS SECTION FILLS THE MATRIX WITH
540 REM THE TRIG VALUES FOR (AX,AY,AZ)
550 REM
560 REM CONVERT DEGREES TO RADIANS
570 AX = DX/F:AY = DY/F:AZ = DZ/F
580 REM GET TRIG VALUES FOR EACH ANGLE
590 SX = SIN(AX):CX = COS(AX)
600 SY = SIN(AY):CY = COS(AY)
610 SZ = SIN(AZ):CZ = COS(AZ)
620 REM FILL MATRIX WITH TRIG VALUES
630 M(1,1) = CZ *CY
640 M(2,1) = SZ
650 M(3,1) = SY *CZ
660 M(1,2) = SX *SY -SZ *CX *CY
670 M(2,2) = CZ *CX
680 M(3,2) = -CY *SX -SY *SZ *CX
690 M(1,3) = -CX *SY -SZ *CY *SX
700 M(2,3) = CZ *SX
710 M(3,3) = CY *CX -SX *SZ *SY
720 RETURN
730 REM
740 REM MAIN PROGRAM LINE
750 REM
760 REM SET UP INITIAL VALUES & CONSTANTS
770 X = 0:Y = 0:Z = 0:D = 0
780 DIM I%(100,3)
790 DIM M(3,3)
800 DIM T(3)
810 BX = 7:BY = 7:BZ = 7
820 DX = 20:DY = 20:DZ = 0
830 OX = 140:OY = 70
840 F = 57.29577951
850 GOSUB 1400
860 REM GO READ IMAGE TABLE
870 GOSUB 1430
880 REM DRAW THE IMAGE
890 GOSUB 1120
900 REM GET CONSOLE INPUT
910 GOSUB 1400
920 PRINT "[ FREEWARE 3D IMAGE PROGRAM (P. LUTUS) ]"
930 PRINT "[D]RAW,[P]OS,[S]CALE,[A]NGLE,[Q]UIT:";
940 GET L$
950 IF L$ = "" THEN 910
960 C = ASC(L$)
970 IF C >96 THEN C = C -32
980 L$ = CHR$(C)
990 PRINT L$
1000 REM EXECUTE COMMAND & RETURN
1010 GOSUB 1040
1020 GOTO 910
1030 REM COMMAND DECODER
1040 GOSUB 1400
1050 IF L$ = "D" THEN 1120
1060 IF L$ = "P" THEN 1160
1070 IF L$ = "S" THEN 1210
1080 IF L$ = "A" THEN 1260
1090 IF L$ = "Q" THEN TEXT : HOME : PRINT CHR$(4)"-STARTUP"
1100 RETURN
1110 REM FILL MATRIX & DRAW IMAGE
1120 GOSUB 570
1130 GOSUB 240
1140 RETURN
1150 REM SELECT SCREEN OFFSETS
1160 X = OX:Y = OY:Z = 0
1170 GOSUB 1310
1180 OX = X:OY = Y
1190 RETURN
1200 REM SELECT IMAGE SCALES
1210 X = BX:Y = BY:Z = BZ
1220 GOSUB 1310
1230 BX = X:BY = Y:BZ = Z
1240 RETURN
1250 REM SELECT ROTATION ANGLES
1260 X = DX:Y = DY:Z = DZ
1270 GOSUB 1310
1280 DX = X:DY = Y:DZ = Z
1290 RETURN
1300 REM CONSOLE INPUT PROCESSOR
1310 P$ = "X":V = X: GOSUB 1350:X = V
1320 P$ = "Y":V = Y: GOSUB 1350:Y = V
1330 P$ = "Z":V = Z: GOSUB 1350:Z = V
1340 RETURN
1350 PRINT "ENTER ";P$;" (NOW ";V;") (NO ENTRY=SAME):";
1360 INPUT "";L$
1370 IF L$ < >"" THEN V = VAL(L$)
1380 RETURN
1390 REM CLEAR TEXT PART OF SCREEN
1400 HOME : VTAB (21)
1410 RETURN
1420 REM READ IMAGE TABLE
1430 RESTORE
1440 L = 0
1450 READ I%(L,0)
1460 IF I%(L,0) = -1 THEN RETURN
1470 READ I%(L,1),I%(L,2),I%(L,3)
1480 L = L +1: GOTO 1450
1490 REM IMAGE TABLE
1500 REM FORMAT: (1=DRAW,0=MOVE),(X,Y,Z)
1510 REM IN CARTESIAN COORDINATES
1520 REM LAST ENTRY = -1
1530 DATA 0,-100,-100,-100
1540 DATA 1,100,-100,-100
1550 DATA 1,100,-100,100
1560 DATA 1,-100,-100,100
1570 DATA 1,-100,-100,-100
1580 DATA 1,0,100,0
1590 DATA 1,100,-100,100
1600 DATA 0,-100,-100,100
1610 DATA 1,0,100,0
1620 DATA 1,100,-100,-100
1630 REM MARK LOWER RIGHT FRONT
1640 DATA 0,100,-100,80
1650 DATA 1,80,-100,100
1660 DATA -1